package com.likeycy.my.list;

/**
 * @ClassName: List
 * @Description: 集合的父类，抽取出来公共的都需要实现的接口方法
 * @Author: sodagreen
 * @Date: 2021/2/23 3:52
 * @Version: 1.0
 */
public interface List<E> {

    int ELEMENT_NOT_FOUND = -1;

    /**
     * 清除集合内所有元素
     */
    void clear();

    /**
     * 获取集合内元素的总数量
     * @return
     */
    int size();

    /**
     * 判断集合是否为空
     * @return 如果此列表不包含任何元素，则为true
     */
    boolean isEmpty();

    /**
     * 判断集合内是否包含某个元素
     * @param element 要检查其是否存在于此集合中的元素
     * @return 如果此列表包含指定的元素，则为true
     */
    boolean contains(E element);

    /**
     * 添加元素到集合的尾部
     * @param element 要添加到集合尾部的元素
     */
    void add(E element);

    /**
     * 获取index位置对应的元素
     * @param index 要返回的元素的索引
     * @return 此列表中指定位置的元素
     */
    E get(int index);

    /**
     * 用指定的元素替换此列表中指定index位置的元素
     * @param index 要替换的元素的索引
     * @param element 要存储在指定位置的元素
     * @return 先前位于指定位置的元素
     */
    E set(int index, E element);

    /**
     * 往index位置添加元素
     * @param index 要添加到集合中的指定索引位置
     * @param element 要添加到集合中指定索引位置的元素
     */
    void add(int index, E element);

    /**
     * 删除 index 位置对应的元素
     * @param index 要从集合中删除元素的索引位置
     * @return 先前位于指定位置的元素
     */
    E remove(int index);

    /**
     * 查看元素的在集合内所处的索引值
     * @param element 要从集合中查找的元素
     * @return 在集合中查找到的指定元素的索引位置。没有返回-1，有返回具体数字值
     */
    int indexOf(E element);

}
